#ifndef __DVEC2_H__
#define __DVEC2_H__

namespace libvec
{
  struct vec2;
  struct dvec3;
  struct dmat2;

  struct dvec2
  {
    double x, y;

    dvec2();
    dvec2(vec2 v);
    dvec2(dvec3 v);
    dvec2(double value);
    dvec2(double x, double y);

    double &operator[](int index);

    dvec2 operator=(vec2 v);
    dvec2 operator=(dvec2 v);
    dvec2 operator=(dvec3 v);

    bool operator==(dvec2 v);
    bool operator!=(dvec2 v);

    dvec2 &operator+();
    dvec2 &operator-();

    dvec2 operator+(dvec2 v);
    dvec2 operator+=(dvec2 v);
    dvec2 operator-(dvec2 v);
    dvec2 operator-=(dvec2 v);
    dvec2 operator*(dmat2 m);
    dvec2 operator*=(dmat2 m);
    dvec2 operator*(double scale);
    dvec2 operator*=(double scale);
    dvec2 operator/(double scale);
    dvec2 operator/=(double scale);
  };
}

#endif /* __DVEC2_H__ */
